import request from '@/config/axios'

// IoT 设备 VO
export interface DeviceVO {
  id: number // 设备 ID，主键，自增
  deviceKey: string // 设备唯一标识符，全局唯一，用于识别设备
  deviceName: string // 设备名称，在产品内唯一，用于标识设备
  cxName: string
  alarmStatus: string // 设备告警状态
  alarmDefult: string // 设备告警定义
  nickname: string // 设备备注名称，供用户自定义备注
  networkType: string //联网方式
  serialNumber: string // 设备序列号
  picUrl: string // 设备图片
  groupId: number // 设备分组
  productId: number // 产品 ID
  productKey: string // 产品 Key
  deviceType: number // 设备类型，参见 IotProductDeviceTypeEnum 枚举
  gatewayId: number // 网关设备 ID，子设备需要关联的网关设备 ID
  state: number // 设备状态，参见 IotDeviceStateEnum 枚举
  onlineTime: Date // 最后上线时间
  offlineTime: Date // 最后离线时间
  activeTime: Date // 设备激活时间
  ip: string // 设备的 IP 地址
  firmwareId: string // 设备的固件编号
  deviceSecret: string // 设备密钥，用于设备认证，需安全存储
  mqttClientId: string // MQTT 客户端 ID
  mqttUsername: string // MQTT 用户名
  mqttPassword: string // MQTT 密码
  authType: string // 认证类型（如一机一密、动态注册）
  latitude: number // 设备位置的纬度
  longitude: number // 设备位置的经度
  areaId: number // 地区编码
  address: string // 设备详细地址
  config: string // 设备配置，JSON 格式
  mqttConfigId?: number // MQTT 配置 ID
}

// 二维码响应接口
export interface QRCodeResponse {
  deviceKey: string
  qrcode: string
}

// 批量二维码响应接口
export interface BatchQRCodeResponse {
  deviceId: number
  data: string
  qrcode: string
}

// PDF导出请求接口
export interface PDFExportRequest {
  devices: Array<{
    deviceId: number
    deviceName: string
    deviceKey: string
    deviceType: string
    qrCode: string
    success: boolean
  }>
  config: {
    qrCodeSize: number
    columns: number
  }
}

// IoT 设备 API
export const DeviceApi = {
  // 查询IoT 设备分页
  getDevicePage: async (params: any) => {
    return await request.get({ url: `/mqtt/device/page`, params })
  },
  getDevicePermissionPage: async (params: any) => {
    return await request.get({ url: `/mqtt/device/permissionPage`, params })
  },
  //
  mapList: async () => {
    return await request.get({ url: `/mqtt/device/mapList` })
  },

  // 查询IoT 设备详情
  getDevice: async (id: number) => {
    return await request.get({ url: `/mqtt/device/get?id=` + id })
  },

  uploadJCJ: async (getewayId: string) => {
    return await request.get({ url: `/mqtt/device/uploadJCJ?getewayId=` + getewayId })
  },

  uploadJCJLog: async (getewayId: string) => {
    return await request.get({ url: `/mqtt/device/uploadJCJLog?getewayId=` + getewayId })
  },

  // 新增IoT 设备
  createDevice: async (data: DeviceVO) => {
    return await request.post({ url: `/mqtt/device/create`, data })
  },

  // 修改IoT 设备
  updateDevice: async (data: DeviceVO) => {
    return await request.put({ url: `/mqtt/device/update`, data })
  },

  // 删除IoT 设备
  deleteDevice: async (id: number) => {
    return await request.delete({ url: `/mqtt/device/delete?id=` + id })
  },
  // 删除IoT 设备
  updateDeviceIsUpload: async (id: number) => {
    return await request.get({ url: `/mqtt/device/updateDeviceIsUpload?id=` + id })
  },

  // 导出IoT 设备 Excel
  exportDevice: async (params) => {
    return await request.download({ url: `/mqtt/device/export-excel`, params })
  },
  //立升同步
  lisUpdateDevice: async () => {
    return await request.post({ url: `/mqtt/device/lisUpdateDevice` })
  },
  //立升 获取水流量
  lisWater: async () => {
    return await request.post({ url: `/mqtt/device/lisWater` })
  },
  //一键上送
  updateHourAndSend: async () => {
    return await request.get({ url: `/mqtt/device/updateHourAndSend` })
  },

  getListMin10: async () => {
    return await request.post({ url: `/mqtt/device/getListMin10` })
  },

  //  获取设备二维码（Base64 格式）
  getDeviceQRCodeBase64: async (deviceId: number): Promise<QRCodeResponse> => {
    return await request.get({
      url: `/mqtt/device/qrcode/base64/${deviceId}`
    })
  },

  // 批量获取设备二维码（Base64 格式）
  getDeviceQRCodeBase64Batch: async (deviceIds: number[]): Promise<BatchQRCodeResponse[]> => {
    return await request.post({
      url: `/mqtt/device/qrcode/base64/batch`,
      data: deviceIds
    })
  },

  // 导出设备二维码PDF
  exportDeviceQRCodePDF: async (data: PDFExportRequest) => {
    return await request.post({
      url: `/mqtt/device/export-qrcode-pdf`,
      data,
      responseType: 'blob'
    })
  }
}
